#include <stdio.h>
#include "stdlib.h"

int main(void) {

                    // 原码二进制          反码二进制           补码二进制
    char ch = 10; //   0 000 1010       0 000 1010          0 000 1010
    char ch1 = -10; // 1 000 1010       1 111 0101          1 111 0110

    printf("%p\n", &ch);
    printf("%c\n", ch1);

    /*
     * 在计算机系统中，数值一律用补码来存储。
补码特点：，
    对于正数，原码、反码、补码相同。
    对于负数，最高位加1,  补码符号位不动，其他位求反，最低位加1

     补码 = 原码取反+1
十进制数                补码
+15                 0 000 1111
-15                 1 111 0001
+0                  0 000 0000
-0                  0 000 0000

在计算机系统中，数值一律用补码来存储，主要原因是：
    统一了零的编码。
    将符号位和其它位统一处理。
    将减法运算转变为加法运算。
    两个用补码表示的数相加时，如果最高位(符号位）有进位，则进位被舍弃
     */


    /*
     * 18bit数据最大存储值为？？
原码：0111 1111 2^7-1      -127
最小值：
    原码：1111 1111 -127
    反码：1000 0000
    补码：1000 0001 =-127
数据存储时将-0对应的区间值设为最小值  -2^7   128

     int 32bit      -2^31 ----   2^31-1 -2147483648 2147483647
     */
    return EXIT_SUCCESS;
}

